package task3;

import java.util.ArrayList;
import java.util.Scanner;

public class test2 {

    static Scanner input=new Scanner(System.in);

    static ArrayList<Integer> stack;//栈序列
    static ArrayList<Integer> run;//运行序列

    public static void main(String[] args) {//主函数输入
        int T=input.nextInt();

        for(int i=0;i<T;i++){//每组数据输入

            int nums=input.nextInt();//每组数据的汽车数量

            stack=new ArrayList<>();//重置
            run=new ArrayList<>();

            for(int j=0;j<nums;j++){//栈序列添加元素
                stack.add(input.nextInt());
            }
            for(int j=0;j<nums;j++){//运行序列添加元素
                run.add(input.nextInt());
            }

            System.out.println(isRight(stack,run,nums)?"Yes":"No");//判断并输出
        }
    }

    private static boolean isRight(ArrayList<Integer> stack,ArrayList<Integer> run,int nums){

        int index=0;//指向stack
        int point=0;//指向run
        boolean isRight=true;

        while (stack.size()>0){

            if(index>=stack.size())//当栈指针超过栈的大小
            {
                isRight=false;
                break;
            }

            int stackItem=stack.get(index);
            int runItem=run.get(point);
            if(stackItem==runItem){//相等
                stack.remove(stack.get(index));

                if (index>0){//每次出栈后，下一个出栈的一定是前一个
                    index--;
                }

                point++;//运行指针右移一位
            }
            else {
                index++;//指针移动
            }


        }

        return isRight;
    }


}
